package com.xbongbong.paas.pojo;

import com.alibaba.fastjson.JSONArray;
import com.xbongbong.paas.domain.entity.ext.OptionalRangeEntity;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
 * 阶段保存
 * @author 李少杰
 * @version v1.0.0
 * @date 2021/11/24 16:08
 */
@Getter
@Setter
@ToString
public class StageSavePojo extends BaseDTO {

    /**
     * 主键
     */
    private Long id;
    /**
     * 阶段名称
     */
    @NotNull(message = "{dto.msg.stageProcessSave.stage.name.NotNull}")
    private String name;
    /**
     * 阶段code
     */
    @NotNull(message = "{dto.msg.stageProcessSave.stage.code.NotNull}")
    private String code;
    /**
     * 阶段进入比例
     */
    @NotNull(message = "{dto.msg.stageProcessSave.stage.intoProportion.NotNull}")
    private Integer intoProportion;
    /**
     * 阶段跳出比例
     */
    @NotNull(message = "{dto.msg.stageProcessSave.stage.outProportion.NotNull}")
    private Integer outProportion;
    /**
     * 阶段类型【0普通流程阶段、1结束阶段-成功、2结束阶段-失败】
     */
    @Min(value = 0, message = "{dto.msg.stageProcessSave.stage.type.error}")
    @Max(value = 2, message = "{dto.msg.stageProcessSave.stage.type.error}")
    @NotNull(message = "{dto.msg.stageProcessSave.stage.type.NotNull}")
    private Integer type;
    /**
     * 阶段是否启用（0不启用、1启用）
     */
    @NotNull(message = "{dto.msg.stageProcessSave.stage.enable.NotNull}")
    private Integer enable;
    /**
     * 阶段排序【sort值越大代表阶段越靠前】
     */
    @NotNull(message = "{dto.msg.stageProcessSave.stage.sort.NotNull}")
    private Integer sort;
    /**
     * 阶段停留限制【0无时间限制、1停留多少时间后超时】
     */
    private Integer stayLimit;
    /**
     * 阶段停留限制时长
     */
    private Integer stayLimitTime;
    /**
     * 阶段停留限制时长单位【1时、2天、3周、4月】
     */
    private Integer stayLimitTimeUnit;
    /**
     * 超时预警颜色是否开启【0关闭、1打开】
     */
    private Integer enableStageWarningColor;
    /**
     * 超时预警颜色
     */
    private String stageWarningColor;
    /**
     * 超时提醒设置
     */
    private List<StageRemindPojo> stageRemindPojoList;
    /**
     * 阶段推进人，空值代表所有人都允许推进
     */
    private List<OptionalRangeEntity> executor;
    /**
     * 阶段跳转前置条件
     */
    @Size(max = 5, message = "{dto.msg.customerStageSave.preConditions.Size}")
    private List<StageConditionPojo> preConditions;
    /**
     * 是否允许跳过阶段（0不允许、1允许）
     */
    private Integer allowSkipStage;
    /**
     * 是否允许重新激活阶段流程（0不允许、1允许）
     */
    private Integer allowReactive;
    /**
     * 允许重新激活阶段流程到哪些阶段
     */
    private List<Long> allowReactiveStage;
    /**
     * 是否关联业务状态（0没有关联、1有关联）
     */
    private Integer openStatus;
    /**
     * 关联业务的那个状态
     */
    private Integer businessRelatedStatus;
    /**
     * 是否必填任务完成后自动跳入下一阶段（0否、1是）
     */
    private Integer enableAutoJump;
    /**
     * 允许从普通阶段直接跳转到结束阶段（0不允许、1允许；默认允许）
     */
    private Integer enableJumpEnd;
    /**
     * 该阶段是否默认值
     */
    private Integer isDefault;
    /**
     * 阶段的关联选项
     * TODO 格式需要封装
     */
    private JSONArray linkOption;
    /**
     * 自定义工作流
     */
    private List<StageWorkflowPojo> stageWorkflowPojoList;
    /**
     * 阶段其他设置
     */
    private StageExtraSettingPojo stageExtraSettingPojo;

    /**
     * 是否允许新建合同，阶段自动跳转此阶段
     * 0 不允许
     * 1 允许
     * null  
     */
    private Integer allowCreateContractSkipStage;

}
